#include <pthread.h> // 带入线程库
#include <iostream>
#include <unistd.h>

// 线程执行的函数
void* threadStart(void* args)
{
    std::string threadname = static_cast<const char*>(args);
    while (true)
    {
        // 打印是哪条线程在跑，以及打印线程ID出来
        std::cout << threadname << " is running...  thread id: " << pthread_self() << std::endl;
        
        sleep(1); // 防刷屏，让他打印慢一点
    }
}

const int n = 3; // 设置线程数量

int main()
{
    // 以数组形式呈现，非数组就 pthread_t t1, t2, t3;  这样也可。
    pthread_t threads[n];

    // 创建三个线程: 
    for (int i = 0; i < n; i++)
    {
        char* name = new char[1024];
        snprintf(name, 1024, "thread-%d",i+1); // 设置线程名

        // 创建并启动线程: 
        pthread_create(threads + i, nullptr, threadStart, (void *)name);
        usleep(100); // 休眠0.1毫秒，错开线程抢显示器打印错乱
    }

    while(true)
    {
        
    } // 还应该等待创建的线程退出以回收资源，是下面的内容，这里就不做处理。

    return 0;
}



#include <pthread.h> // 带入线程库
#include <iostream>
#include <unistd.h>

// 线程执行的函数
void *threadStart(void *args)
{
    std::string threadname = static_cast<const char *>(args);

    // 打印是哪条线程在跑，以及打印线程ID出来
    std::cout << threadname << " is running...  thread id: " << pthread_self() << std::endl;
}

int main()
{
    pthread_t t1;

    std::string name = "thread-1";

    // 创建并启动线程:
    pthread_create(&t1, nullptr, threadStart, (void *)name.c_str());

    if (pthread_join(t1, nullptr) == 0)
    {
        std::cout << "thread-1 join succeed!" << std::endl;
    }

    return 0;
}






#include <stdio.h>  
#include <stdlib.h>  
#include <pthread.h>  
  
void* thread_function(void* arg) {  
    // 模拟一些工作  
    printf("线程开始执行...\n");  
    // ...（执行一些任务）  
  
    // 线程准备退出  
    printf("线程准备退出\n");  
    pthread_exit((void*)1); // 退出线程，并传递退出状态 1  
  
    // 注意：下面的代码不会被执行，因为线程已经通过 pthread_exit 退出了  
    printf("这行代码不会被执行\n");  
  
    return NULL; // 这行代码也不会被执行  
}  
  
int main() {  
    pthread_t tid;  
    void* thread_result;  
  
    // 创建一个线程  
    if (pthread_create(&tid, NULL, thread_function, NULL) != 0) {  
        fprintf(stderr, "无法创建线程\n");  
        return 1;  
    }  
  
    // 等待线程结束，并获取其退出状态  
    if (pthread_join(tid, &thread_result) != 0) {  
        fprintf(stderr, "无法等待线程\n");  
        return 2;  
    }  
  
    // 打印线程的退出状态  
    printf("线程返回了: %ld\n", (long)thread_result);  
  
    return 0;  
}


#include <pthread.h> // 带入线程库
#include <iostream>
#include <unistd.h>

// 线程执行的函数
void *threadStart(void *args)
{
    std::string threadname = static_cast<const char *>(args);

    // 打印是哪条线程在跑，以及打印线程ID出来
    std::cout << threadname << " is running...  thread id: " << pthread_self() << std::endl;

    pthread_exit((void *)1); // 退出线程，并传递退出状态 1

    return nullptr; // pthread_exit执行后这句就也不会执行了
}

int main()
{
    pthread_t t1;

    std::string name = "thread-1";

    // 创建并启动线程:
    pthread_create(&t1, nullptr, threadStart, (void *)name.c_str());

    void *thread_result = nullptr; // 指针变量，从当某种容器保存数据

    if (pthread_join(t1, &thread_result) == 0) // 进行捕捉
    {
        std::cout << "thread-1 join succeed!" << std::endl;
        printf("线程退出成功，退出信息为: %ld\n", (long)thread_result); // 打印推出信息
    }

    sleep(10); // 先让主线程别退出那么快，用于观察
    return 0;
}
